package com.etalk.crm.service;

import com.etalk.crm.pojo.FormalOrderInfo;
import com.etalk.crm.pojo.KcOrders;
import com.etalk.crm.pojo.KcPackage;
import com.github.pagehelper.PageInfo;
import org.springframework.transaction.annotation.Transactional;

import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * @Author Terwer
 * @Date 2018/11/12 18:24
 * @Version 1.0
 * @Description 订单
 **/
public interface KcOrdersService {
    /**
     * 活动赠送赠送课时添加订单
     * @param names        待赠送的用户列表
     * @param packageType  1即时生效,2正式套餐或促销后生效
     * @param kcPackage 套餐
     * @param activityId   活动id
     * @param activityName 活动或者礼品名称
     * @param isGift       是否赠送礼品
     * @return 添加订单是否成功
     */
    boolean addKcOrdersFromActivity(List<String> names, int packageType, KcPackage kcPackage, int activityId, String activityName, int isGift);

    /**
     * 查询学员信息卡显示的订单信息
     * @param personId 学员id
     * @param pageNum 页码
     * @param pageSize 页记录数
     * @return 结果
     */
    PageInfo<KcOrders> searchOrderListByPersonId(Integer personId, int pageNum, int pageSize);

    /**
     * 查询学员信息的订单信息
     * @param personId 学员id
     * @param pageNum 页码
     * @param pageSize 页记录数
     * @return 结果
     */
    PageInfo<KcOrders> searchAvailableOrderListByPersonId(Integer personId, int pageNum, int pageSize);

    /**
     * 根据参数kcPackageId添加DEMO套餐
     * @param kcPackageId 套餐id
     * @param personId 学员id
     * @param storesId 机构id
     * @return 记录数
     */
    int addKcOrdersByDemo(int kcPackageId, Integer personId, int storesId);

    /**
     * 修改购买时间
     * @param orderId 订单id
     * @param newBuyTime 新的购买时间
     * @return 记录数
     */
    int modifyOrderBuyTime(String orderId, Date newBuyTime);

    /**
     * 废除或终止订单
     * @param personId 学员id
     * @param orderId 订单id
     * @param remark 废除或终止订单说明
     * @return 记录数
     */
    int abolishOrderById(int personId,String orderId,String remark);

    /**
     * 查询订单信息
     * @param orderId 订单id
     * @return 订单信息
     */
    KcOrders searchSplitGiftOrderById(String orderId);

    /**
     * 提交拆分订单数据
     * @param orderId 订单id
     * @param splitNum 拆分数量
     * @param materialId 教材id
     * @param materialPage 教材页码
     * @param materialPageName 教材页码名称
     * @param personId 赠送用户id
     * @param loginName 赠送用户登录名
     * @return
     */
    @Transactional(rollbackFor=Exception.class)
    int addSplitGiftKcOrder(String orderId, int splitNum, int materialId, int materialPage, String materialPageName, int personId, String loginName);

    /**
     * 查询正式有效订单
     * @param record 查询条件
     * @param pageNum 页码
     * @param pageSize 页记录数
     * @return
     */
    PageInfo<FormalOrderInfo> searchFormalOrderInfoListByPage(FormalOrderInfo record, Integer pageNum, Integer pageSize);

    /**
     * 查询ssc名下学员正式有效订单在学教材
     * @return
     */
    List<FormalOrderInfo> searchFormalTextbookList();

    /**
     * 切换下本教材
     * @param listOrderBookId 订单教材关联id
     * @return
     */
    @Transactional(rollbackFor = Exception.class)
    Map<String,Object> modifyOrderNextMaterial(List<Integer> listOrderBookId);
}
